﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;

namespace hse_2013_photo_viewer
{
    public partial class PictureViewingUI : UserControl
    {
        
        PhotoBrowsing provider = new PhotoBrowsing();
        private int counter = 0;
        public string path = "C:\\";
        public Action RenewUI;
        
        public PictureViewingUI()
        {
            InitializeComponent();            
        }

        /// <summary>
        /// сброс счетчика
        /// </summary>
        public void ResetCounter()
        {
            counter = 0;
        }
        /// <summary>
        /// метод для установки картинки
        /// </summary>
        public void SetPicture()
        {
           
            if (counter <= provider.LoadPictures(path).Count - 1 && counter >= 0)
            {
                mainPictureBox.Load(@provider.LoadPictures(path)[counter]);
                labelImageName.Text = Path.GetFileName(provider.LoadPictures(path)[counter]);
                labelPicCount.Text = (counter + 1).ToString() + "/" + provider.LoadPictures(path).Count.ToString();
            }

            if (provider.LoadPictures(path).Count == 0) //это нужно для выбора директорий без изображений
            {
                mainPictureBox.Image = null;
                labelImageName.Text = "No image";
                labelPicCount.Text = "0/0";
            }
        }

        
        /// <summary>
        /// метод для установки следующей картинки (счетчик +1)
        /// </summary>
        void SetNextPicture()
        {
            if (counter <= provider.LoadPictures(path).Count - 2 && counter >= 0)
            {
                counter++;
                SetPicture();
                Logger.LogMessage("Next picture set");
            }
            
            
        }

        /// <summary>
        /// метод для установки предыдущей картинки (счетчик -1)
        /// </summary>
        void SetPrevPicture()
        {
            if (counter >= 1 && counter <= provider.LoadPictures(path).Count - 1)
            {
                counter--;
                SetPicture();
                Logger.LogMessage("Previous picture set");
            }
        }

        /// <summary>
        /// кнопка вперед
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void ButtonNext_Click(object sender, EventArgs e)
        {
            SetNextPicture();
        }

        /// <summary>
        /// загрузка формы
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void PictureViewingUI_Load(object sender, EventArgs e)
        {
            SetPicture();
            //эта строка обнуляет счетчик, чтобы при переходе к новой директории просмотр фотографий начинался с первой
            RenewUI += new Action(ResetCounter);
            RenewUI += new Action(SetPicture);
        }
        /// <summary>
        /// кнопка назад
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void ButtonPrev_Click(object sender, EventArgs e)
        {
            SetPrevPicture();
        }

        

        /// <summary>
        /// метод для выуживания клавиш направления
        /// </summary>
        /// <param name="msg"></param>
        /// <param name="keyData"></param>
        /// <returns></returns>
        protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
        {
            Keys keypressed = keyData;
            switch (keypressed)
            {
                case Keys.Left:
                    {
                        SetPrevPicture();
                        Logger.LogMessage("Left key was used");
                        // эта строчка почему то не дает стрелкам переключаться между кнопками
                        return true;
                    }
                case Keys.Right:
                    {
                        SetNextPicture();
                        Logger.LogMessage("Right key was used");
                        // эта строчка почему-то не дает стрелкам переключаться между кнопками
                        return true;
                    }
            }
           
            return base.ProcessCmdKey(ref msg, keyData);
        }
        

        private void slideShowButton_Click(object sender, EventArgs e)
        {

            if (timerSlideShow.Enabled == true)
            {
                timerSlideShow.Stop();
                Logger.LogMessage("Slide show stopped");
            }

            else
            {
                timerSlideShow.Start();
                Logger.LogMessage("Slide show started");
            }

        }

        private void runslideshow()
        {
            if (counter == provider.LoadPictures(path).Count - 1)
            {
                counter = 0;
                SetPicture();
                Logger.LogMessage("Slide Show restarted");
            }
            else
            {
                SetNextPicture();
            }
        }

        private void timerSlideShow_Tick(object sender, EventArgs e)
        {
            runslideshow();
        }

        private void trackBarSlideShow_Scroll(object sender, EventArgs e)
        {
            timerSlideShow.Interval = trackBarSlideShow.Value;           
            toolTip1.Show(timerSlideShow.Interval.ToString() + "ms", this, PointToClient(Cursor.Position).X, PointToClient(Cursor.Position).Y + (Cursor.Size.Height / 2));
        }

        private void trackBarSlideShow_MouseUp(object sender, MouseEventArgs e)
        {
            toolTip1.Hide(this);
        }

      


        
    }
}
